This invention relates generally to software code optimization and performance analysis.
Software program developers face the challenge of maintaining stability of programs by analyzing performance data and refining the program code to resolve problems revealed by the data. Performance data is typically used to describe performance properties, which are characterizations of performance behaviors, such as cache misses or load imbalances, in the program.
Performance tools are often used to measure and analyze performance data to provide statistics relating to the historical behavior of a program. Although a performance problem may be determined subjectively, most program developers use at least one performance tool to assist in such a determination. For example, the performance tool may indicate a performance problem when the severity of an issue exceeds some defined threshold. The severity of a problem indicates the importance of the problem. A review of problem severities, therefore, may allow the program developer to focus efforts on the more critical problems of the program. The issue having the highest severity is generally referred to as the bottleneck of the program. The bottleneck is frequently addressed before other issues, provided its severity is high enough to render it a performance problem.
Performance statistics of a program may be compared to those of a previous version of the program to determine whether changes in the program have resulted in improved performance. Using the statistics, the program developer may predict future performance problems, as well as resolving existing performance problems.
Although performance tools have proven very helpful in allowing program developers to improve the performance of programs, the tools are often limited in their applicability. For example, performance tools are often platform-dependent and/or language-dependent. Even if a tool is capable of supporting performance analyses of a variety of program paradigms and architectures, such a tool is generally incapable of correlating performance data gathered at lower levels with higher-level programming paradigms.
Thus, there is a need for an improved way of optimizing the performance of software or a computer system.